table of contents
KILL(2) | Podręcznik programisty Linuksa | KILL(2) |
NAZWA¶
kill - wysłanie sygnału do procesu
SKŁADNIA¶
#include <sys/types.h>
#include <signal.h> int kill(pid_t pid, int sig);
OPIS¶
Funkcja systemowa kill może służyć do przesłania dowolnego sygnału do dowolnego procesu lub do dowolnej grupy procesów.
Jeśli pid ma wartość dodatnią, to sygnał sig jest przesyłany do procesu pid.
Jeśli pid jest równy 0, to sig jest przesyłany do wszystkich procesów należących do tej samej grupy, co proces bieżący.
Jeśli pid jest równy -1, to sygnał jest przesyłany do wszystkich procesów, oprócz procesu nr 1 (init), szczegóły poniżej.
Jeśli pid jest mniejszy niż -1, to sygnał jest przesyłany do wszystkich procesów należących do grupy procesów o numerze -pid.
If sig jest równy 0, to nie jest przesyłany żaden sygnał, ale nadal jest wykonywana kontrola błędów.
WARTOŚĆ ZWRACANA¶
Po pomyślnym zakończeniu zwracane jest zero. Po błędzie zwracane jest -1 i odpowiednio ustawiane errno.
BŁĘDY¶
- EINVAL
- Podano nieprawidłowy sygnał.
- ESRCH
- Pid lub grupa procesów nie istnieje. Należy zauważyć, że istniejący proces może być zombie, czyli procesem, który już popełnił samobójstwo, lecz jeszcze na niego nie zaczekano ( wait ).
- EPERM
- Proces nie ma uprawnień do wysłania sygnału do któregokolwiek z otrzymujących go procesów. Aby proces miał prawo wysłać sygnał do procesu pid musi on mieć uprawnienia roota albo rzeczywisty lub efektywny ID użytkownika procesu wysyłającego musi być równy rzeczywistemu ID lub zachowanemu set UID procesu otrzymującego sygnał. W przypadku sygnału SIGCONT wystarcza, aby procesy wysyłający i otrzymujący należały do tej samej sesji.
UWAGI¶
Nie można wysyłać sygnału, dla którego nie ma zainstalowanego pogramu obsługi, do zadania numer 1, czyli procesu init. Zabezpiecza to przed przypadkowym załamaniem systemu.
POSIX 1003.1-2001 wymaga, aby kill(-1,sig) wysyłało sig do wszystkich procesów, do których aktualny proces może go wysłać, za ewentualnym wyjątkiem pewnych, zdefiniowanych w implementacji, procesów systemowych. Linux pozwala procesowi wysłać sygnał do samego siebie, ale wywołanie kill(-1,sig) pod Linuksem nie powoduje wysłania sygnału do bieżącego procesu.
HISTORIA LINUKSA¶
W różnych wersjach jądra, Linux wymusza różne reguły dotyczące uprawnień wymaganych od procesu nieuprzywilejowanego, aby mógł on wysłać sygnał do innego procesu. W jądrach od 1.0 do 1.2.2 sygnał mógł być wysłany, gdy efektywny identyfikator użytkownika wysyłającego jest taki sam, jak odbierającego, lub gdy rzeczywisty identyfikator użytkownika wysyłającego jest taki sam, jak odbierającego. Od jądra 1.2.3 aż do 1.3.77, sygnał mógł być wysłany, gdy efektywny identyfikator użytkownika wysyłającego jest taki sam, jak efektywny lub rzeczywisty identyfikator użytkownika odbierającego. Obecne zasady, zgodnie z POSIX 1003.1-2001, zostały przyjęte w jądrze 1.3.78.
ZGODNE Z¶
SVr4, SVID, POSIX.1, X/OPEN, BSD 4.3, POSIX 1003.1-2001
ZOBACZ TAKŻE¶
_exit(2), killpg(2), signal(2), tkill(2), exit(3), signal(7)
2001-12-18 | Linux 2.5.0 |